local CommonOHOH = _G.CommonOHOH;
local M = CommonOHOH.class.new(script, CommonOHOH.files.BaseObject(),script.Parent.Name);
local ConnectClass=_G.CommonOHOH.load.Connect();
local TowerClass=_G.CommonOHOH.load.Tower()
local RoadTool=_G.CommonOHOH.load.RoadTool()
local LevelModel = _G.CommonOHOH:GetPath_Loop("stake",game.ReplicatedStorage.Resource)
local Players = game:GetService("Players")
function M.new(...)
	return M(...);
end;


function M.ctor(self,player,id,levelData,folder)--构造函数
    self.LevelId=id
    self.player=player
    self.Data=levelData
    self.Folder=folder --存放当前比赛生成的所有对象

    self.SuccessEvent=ConnectClass.new()
    self.FailEvent=ConnectClass.new()
    
	M.super.ctor(self);
end;

function M.dtor(self)--析构函数
    M.super.dtor(self);
end;

function M.GetData(self)--获取关卡数据
    return  self.Data
end


--参数：蹲子放的位置
function M.ActivePlatform(self,cframe,player) --激活墩子平台（即玩家可以去触发生成塔了）
    --生成墩子模型，监听玩家的碰撞，碰撞后，触发 ActiveTower函数
    self.modelInsts =LevelModel:Clone()
    self.modelInsts.Parent = self.Folder
    self.modelInsts.Name = player.user_id
    self.modelInsts.ctrl.head.value.Texture = Players:GetUserThumbnailAsync(player.user_id,Enum.ThumbnailType.HeadShot,Enum.ThumbnailSize.Size180x180)
    self.modelInsts:SetPrimaryPartCFrame(cframe)
    local connection = nil
    connection = self.modelInsts.ctrl.touch.value.Touched:Connect(function(hit)
        local hitPlayer = game.Players:GetPlayerFromCharacter(hit.Parent)
        if hitPlayer then
            connection:Disconnect()
            if hitPlayer.UserId==tonumber( self.modelInsts.Name) then
                    print("激活塔")
                    self:ActiveTower()
            end
        end
    end)
    
    self.StartFrame =  self.modelInsts.ctrl.nextPos.value.WorldCFrame
    self.TowerCFrame =  self.modelInsts.ctrl.tower.value.WorldCFrame
end

-- 获取路起点位置
function M.GetRoadStartCframe(self)
    --返回路的起点位置，即（墩子的下一个位置）
    return self.StartFrame
end


-- 获取路终点位置
function M.GetRoadEndCframe(self)
  --返回路的结束位置，即（下一关的墩子位置）
     return self.EndCFrame
end

--获取生成塔的位置
function M.GetTowerCFrame(self)
    return self.TowerCFrame
end


function M.ActiveTower(self) --激活生成塔
    self.tower=TowerClass.new(self.Data.tower,self:GetTowerCFrame())

    --砸塔成功监听
    self.tower.SuccessEvent:Connect(function()
        self:Success()
    end)

    --砸塔失败监听
    self.tower.FailEvent:Connect(function()
        self:Fail()
    end)
end

-- 砸塔成功处理
function M.Success(self)
    self:AddProcess(function()
        local data={}
        for i=1,self.Data.road.length do
            table.insert(data,self.Data.id)
        end
        --客户端初始化动画
        self:FullRoad(data)
        self.player.PaveAnimationEvent:Action(data,self.modelInsts,self.EndCFrame)
        
        self.player.LevelSuccessEvent:Action(self.LevelId)
    end)
end

--生成路（隐藏状态）
function M.FullRoad(self,data)

    -- road={
    --     id=1,--关卡路的类型
    --     length=10,--关卡路的长度
    -- },

   self.EndCFrame= RoadTool.FullRoad(self:GetRoadStartCframe(),data,self.player,self.LevelId, self.modelInsts)
end


-- 砸塔失败处理
function M.Fail(self) 
    self.player.LevelFailEvent:Action(self.LevelId)
end

return M